package com.example.service.impl;

import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.ListOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;

@Service
@Slf4j
public class ListCacheServiceImpl {

    @Autowired
    private RedisTemplate<String,Object> redisTemplate;

    @Resource(name = "redisTemplate")
    ListOperations<String, String> listOper;
    /**
     *
     * 需求：热点新闻表,获取最新5条首页新闻。
     * 1.默认首页显示5条热点新闻。具备分页功能。
     * 2.后台管理员可以通过置顶新闻.
     */
    /**
     * 新闻初始化，五条热点新闻
     * @return
     */
    public void initBaiduNewsTop5(){
        String key = "baidu:news:top5";
//        redisTemplate.opsForList().leftPush(key,"1...");
        listOper.rightPush(key,"1.从一座纪念馆看克敌制胜法宝");
        listOper.rightPush(key,"2.现场:重庆涪陵突发山火");
        listOper.rightPush(key,"3.国防部:中国军队赴俄参加演习");
        listOper.rightPush(key,"4.解放军将赴俄罗斯参加“东方-2022”演习");
        listOper.rightPush(key,"5.犯我中华者必将受到惩处");
    }

    /**
     * 显示最新的五条新闻
     * @return
     */
    public List<String> getKListTop5(){
        String key = "baidu:news:top5";
        return listOper.range(key, 0, 4);
    }
    /**
     * 置顶新闻
     */
    public Long addBaiduNewsTop(String context){
        String key = "baidu:news:top5";
        return listOper.leftPush(key, context);
    }

    /**
     * List任务队列 模拟京东商城物流订单列表地址
     * 生成物流队列：
     * 1.商家发货（快递小哥上门取件）
     * ~。。。。。。
     * 4.流程
     * 5.终点
     * 6.已签收
     */
    /**
     * 1.生成物流队列（客户完成支付功能，会根据商家发货地址~~用户收获地址）
     */
    public void initProductQueue(String cartId){
        //待执行队列
        String key = "product:queue:init:execute:" + cartId;
        listOper.leftPush(key,"1.商家发货（快递小哥上门取件）");
        listOper.leftPush(key,"2.商家发货（快递小哥上门取件）");
        listOper.leftPush(key,"3商家发货（快递小哥上门取件）");
        listOper.leftPush(key,"4商家发货（快递小哥上门取件）");
        listOper.leftPush(key,"5商家发货（快递小哥上门取件）");
        listOper.leftPush(key,"6.已签收");
    }

    /**
     * 2.消费队列
     * @param cartId
     */
    public String touchQueue(String cartId){
        String key = "product:queue:init:execute:" + cartId;
        //已完成队列
        String succKey = "product:queue:success:" + cartId;
        return listOper.rightPopAndLeftPush(key,succKey);
    }

    /**
     * 3.商家/物流公司：这个快递还有几项未完成?
     */
    public List<String> productsQueueExecute(String cartId){
        String key = "product:queue:init:execute:" + cartId;
        return listOper.range(key, 0, -1);

    }
    /**
     * 4.买家:我的快递到哪了？
     */
    public List<String> productsQueueSuccess(String cartId){
        String key = "product:queue:success:" + cartId;
        return listOper.range(key,0,-1);
    }
}
